home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / pdriver / psub.c < prev   
Text File  |  1994-11-16  |  8KB  |  545 lines

  1. #include"pdriver.h"
  2.  
  3. int        addstrings( const char *s, char *t )
  4. {
  5.     int        i;
  6.  
  7.     i = 0;
  8.     while( *s )
  9.     {
  10.         *t++ = *s++;
  11.         i++;
  12.     }
  13.     return i;
  14. }
  15.  
  16. int        cmpstrings( const char *s, const char *t )
  17. {
  18.     while( *t )
  19.     {
  20.         if( *s++ != *t++ )
  21.             return 0;
  22.     }
  23.     return 1;
  24. }
  25.  
  26. int        printStrings( int n, char *p )
  27. {
  28.     int        i,e;
  29. /*    FILE    *fp;
  30.     fp = fopen( "i:\\debug.bin", "ab" );*/
  31.  
  32.     if( n )
  33.     {
  34.         for( i=0; i<n; i++ )
  35.         {
  36.             while( e = PRN_putc( *(p+i) ) )
  37.             {
  38.                 if( printReady( e ) )
  39.                 {
  40.                     end_();
  41.                     exit(0);
  42.                 }
  43.             }
  44. /*            fputc( *(p+i), fp );*/
  45.         }
  46.     }
  47.     else
  48.     {
  49.         while( *p )
  50.         {
  51.             while( e = PRN_putc( *p ) )
  52.             {
  53.                 if( printReady( e ) )
  54.                 {
  55.                     end_();
  56.                     exit(0);
  57.                 }
  58.             }
  59. /*            fputc( *p, fp );*/
  60.             p++;
  61.         }
  62.     }
  63. /*    fclose( fp );*/
  64.     return 0;
  65. }
  66.  
  67. int        printKanji( char *p )
  68. {
  69.     union
  70.     {
  71.         unsigned short int sjis;
  72.         char c[2];
  73.     } moji;
  74.  
  75.     int        jis,e;
  76.     char    mode;
  77.  
  78.     mode =  ' ';
  79.     moji.c[1] = *p;
  80.     while( moji.c[1] )
  81.     {
  82.         moji.c[1] = *p++;
  83.         D_print((" %2x ",(moji.c[1] & 0xff)));
  84.  
  85.         if( (((unsigned int)moji.c[1]&0xff)>0xe0) || 
  86.           ( (((unsigned int)moji.c[1]&0xff)>0x80) &&
  87.             (((unsigned int)moji.c[1]&0xff)<0xa0) ) )
  88.         {
  89.             moji.c[0] = *p++;
  90.             D_print((" %2x ",(moji.c[0] & 0xff)));
  91.             jis = FNT_sjisToJis( (int)moji.sjis );
  92.             if( mode != 'K' )
  93.             {
  94.                 mode = 'K';
  95.                 while( e = printStrings( 0, scsjis ) )
  96.                 {
  97.                     if( printReady( e ) )
  98.                         return 1;
  99.                 }
  100.             }
  101.             moji.sjis = (unsigned short int)jis;
  102.             while( e = PRN_putc( moji.c[1] ) )
  103.             {
  104.                 if( printReady( e ) )
  105.                     return 1;
  106.             }
  107.             while( e = PRN_putc( moji.c[0] ) )
  108.             {
  109.                 if( printReady( e ) )
  110.                     return 1;
  111.             }
  112.         }
  113.         else
  114.         {
  115.             if( mode != 'A' )
  116.             {
  117.                 mode = 'A';
  118.                 while( e = printStrings( 0, scsank ) )
  119.                 {
  120.                     if( printReady( e ) )
  121.                         return 1;;
  122.                 }
  123.             }
  124.             while( e = PRN_putc( moji.c[1] ) )
  125.             {
  126.                 if( printReady( e ) )
  127.                     return 1;
  128.             }
  129.         }
  130.     }
  131.     return 0;
  132. }
  133.  
  134. int        search( char *p, int *i )
  135. {
  136.     if( cmpstrings( p, "h1byte" ) )            /*半角1byte指定*/
  137.     {
  138.         *i = 6;
  139.         return 1;
  140.     }
  141.     if( cmpstrings( p, "up{" ) )        /*上付文字開始*/
  142.     {
  143.         *i = 3;
  144.         return 2;
  145.     }
  146.     if( cmpstrings( p, "down{" ) )    /*下付文字開始*/
  147.     {
  148.         *i = 5;
  149.         return 4;
  150.     }
  151.     if( cmpstrings( p, "kanjipitch(" ) )    /*漢字文字ピッチ*/
  152.     {
  153.         int        j;
  154.         unsigned char    n;
  155.         char    *k;
  156.         k = pool;
  157.         *i = 12;
  158.  
  159.         for( j=11; j<15; j++ )
  160.         {
  161.             if( *(p+j) == ')' )
  162.             {
  163.                 k --;
  164.                 *k += 0x50;
  165.                 k ++;
  166.                 *k = 0;
  167.                 k ++;
  168.                 *k = n;
  169.                 break;
  170.             }
  171.             if( *(p+j) >= '0' && *(p+j) <= '9' )
  172.             {
  173.                 n *= 10;
  174.                 n += *(p+j) - 0x30;
  175.                 ++ *i;
  176.                 *k = *(p+j) - 0x10;
  177.                 k ++;
  178.             }
  179.             else
  180.             {
  181.                 return 0;
  182.             }
  183.         }
  184.         return 6;
  185.     }
  186.     if( cmpstrings( p, "retpitch(" ) )        /*改行ピッチ*/
  187.     {
  188.         int        j;
  189.         char    *k;
  190.         unsigned char    n;
  191.         k = pool;
  192.         *i = 10;
  193.  
  194.         for( j=9; j<13; j++ )
  195.         {
  196.             if( *(p+j) == ')' )
  197.             {
  198.                 k --;
  199.                 *k += 0x50;
  200.                 k ++;
  201.                 *k = 0;
  202.                 k ++;
  203.                 *k = n;
  204.                 break;
  205.             }
  206.             if( *(p+j) >= '0' && *(p+j) <= '9' )
  207.             {
  208.                 n *= 10;
  209.                 n += *(p+j) - 0x30;
  210.                 ++ *i;
  211.                 *k = *(p+j) - 0x10;
  212.                 k ++;
  213.             }
  214.             else
  215.             {
  216.                 return 0;
  217.             }
  218.         }
  219.         return 8;
  220.     }
  221.     if( cmpstrings( p, "normal" ) )            /*標準*/
  222.     {
  223.         *i = 6;
  224.  
  225.         if( *(p+6) = '{' )
  226.         {
  227.             ++ *i;
  228.             pool[0] = 1;
  229.         }
  230.         else
  231.             pool[0] = 0;
  232.  
  233.         return 10;
  234.     }
  235.     if( cmpstrings( p, "wide" ) )            /*横倍*/
  236.     {
  237.         *i = 4;
  238.  
  239.         if( *(p+4) = '{' )
  240.         {
  241.             ++ *i;
  242.             pool[0] = 1;
  243.         }
  244.         else
  245.             pool[0] = 0;
  246.  
  247.         return 11;
  248.     }
  249.     if( cmpstrings( p, "tall" ) )            /*縦倍*/
  250.     {
  251.         *i = 4;
  252.  
  253.         if( *(p+4) = '{' )
  254.         {
  255.             ++ *i;
  256.             pool[0] = 1;
  257.         }
  258.         else
  259.             pool[0] = 0;
  260.  
  261.         return 12;
  262.     }
  263.     if( cmpstrings( p, "large" ) )            /*縦横倍*/
  264.     {
  265.         *i = 5;
  266.  
  267.         if( *(p+5) = '{' )
  268.         {
  269.             ++ *i;
  270.             pool[0] = 1;
  271.         }
  272.         else
  273.             pool[0] = 0;
  274.  
  275.         return 13;
  276.     }
  277.     if( cmpstrings( p, "halftall" ) )        /*縦半分*/
  278.     {
  279.         *i = 8;
  280.  
  281.         if( *(p+8) = '{' )
  282.         {
  283.             ++ *i;
  284.             pool[0] = 1;
  285.         }
  286.         else
  287.             pool[0] = 0;
  288.  
  289.         return 14;
  290.     }
  291.     if( cmpstrings( p, "halfwide" ) )        /*横半分*/
  292.     {
  293.         *i = 8;
  294.  
  295.         if( *(p+8) = '{' )
  296.         {
  297.             ++ *i;
  298.             pool[0] = 1;
  299.         }
  300.         else
  301.             pool[0] = 0;
  302.  
  303.         return 15;
  304.     }
  305.     if( cmpstrings( p, "h_t_wide" ) )    /*縦半分横倍*/
  306.     {
  307.         *i = 8;
  308.  
  309.         if( *(p+8) = '{' )
  310.         {
  311.             ++ *i;
  312.             pool[0] = 1;
  313.         }
  314.         else
  315.             pool[0] = 0;
  316.  
  317.         return 16;
  318.     }
  319.     if( cmpstrings( p, "h_w_tall" ) )    /*縦倍横半分*/
  320.     {
  321.         *i = 8;
  322.  
  323.         if( *(p+8) = '{' )
  324.         {
  325.             ++ *i;
  326.             pool[0] = 1;
  327.         }
  328.         else
  329.             pool[0] = 0;
  330.  
  331.         return 17;
  332.     }
  333.     if( cmpstrings( p, "small" ) )            /*縦横半分*/
  334.     {
  335.         *i = 5;
  336.  
  337.         if( *(p+5) = '{' )
  338.         {
  339.             ++ *i;
  340.             pool[0] = 1;
  341.         }
  342.         else
  343.             pool[0] = 0;
  344.  
  345.         return 18;
  346.     }
  347.     if( cmpstrings( p, "gothic" ) )            /*ゴシック*/
  348.     {
  349.         *i = 6;
  350.  
  351.         if( *(p+6) = '{' )
  352.         {
  353.             ++ *i;
  354.             pool[0] = 1;
  355.         }
  356.         else
  357.             pool[0] = 0;
  358.  
  359.         return 19;
  360.     }
  361.     if( cmpstrings( p, "mintyo" ) )            /*明朝体*/
  362.     {
  363.         *i = 6;
  364.  
  365.         if( *(p+6) = '{' )
  366.         {
  367.             ++ *i;
  368.             pool[0] = 1;
  369.         }
  370.         else
  371.             pool[0] = 0;
  372.  
  373.         return 20;
  374.     }
  375.     if( cmpstrings( p, "underline{" ) )        /*漢字アンダーライン指定*/
  376.     {
  377.         *i = 10;
  378.         return 21;
  379.     }
  380.     if( cmpstrings( p, "connect_on" ) )        /*罫線接続指定*/
  381.     {
  382.         *i = 10;
  383.         return 27;
  384.     }
  385.     if( cmpstrings( p, "connect_off" ) )    /*罫線接続解除*/
  386.     {
  387.         *i = 11;
  388.         return 28;
  389.     }
  390.     if( cmpstrings( p, "set_top" ) )        /*漢字縦倍上端合わせ*/
  391.     {
  392.         *i = 7;
  393.         return 29;
  394.     }
  395.     if( cmpstrings( p, "set_bottom" ) )        /*漢字縦倍下端合わせ*/
  396.     {
  397.         *i = 10;
  398.         return 30;
  399.     }
  400.     if( cmpstrings( p, "set_center" ) )        /*漢字縦倍中心合わせ*/
  401.     {
  402.         *i = 10;
  403.         return 31;
  404.     }
  405.     if( cmpstrings( p, "proportion{" ) )    /*欧文ピッチ指定*/
  406.     {
  407.         *i = 11;
  408.         return 32;
  409.     }
  410.     if( cmpstrings( p, "r_back(" ) )        /*相対水平逆タブ1/2*/
  411.     {
  412.         int        j;
  413.         char    *k;
  414.         k = pool;
  415.         *i = 8;
  416.  
  417.         for( j=7; j<11; j++ )
  418.         {
  419.             if( *(p+j) == ')' )
  420.             {
  421.                 *k = 0x6a;
  422.                 k ++;
  423.                 *k = 0;
  424.                 break;
  425.             }
  426.             if( *(p+j) >= '0' && *(p+j) <= '9' )
  427.             {
  428.                 ++ *i;
  429.                 *k = *(p+j);
  430.                 k ++;
  431.             }
  432.             else
  433.             {
  434.                 return 0;
  435.             }
  436.         }
  437.         return 37;
  438.     }
  439.     if( cmpstrings( p, "next" ) )    /*ページ印字+改ページ*/
  440.     {
  441.         *i = 4;
  442.         return 38;
  443.     }
  444.     if( cmpstrings( p, "leftmargin(" ) )        /*レフトマージン指定*/
  445.     {
  446.         int        j;
  447.         char    *k;
  448.         unsigned char    n;
  449.         k = pool;
  450.         *i = 12;
  451.         n = 0;
  452.  
  453.         for( j=11; j<15; j++ )
  454.         {
  455.             if( *(p+j) == ')' )
  456.             {
  457.                 *k = 0x20;
  458.                 k ++;
  459.                 *k = 0x51;
  460.                 k ++;
  461.                 *k = 0;
  462.                 k ++;
  463.                 *k = n;
  464.                 break;
  465.             }
  466.             if( *(p+j) >= '0' && *(p+j) <= '9' )
  467.             {
  468.                 ++ *i;
  469.                 *k = *(p+j);
  470.                 k ++;
  471.                 n *= 10;
  472.                 n += *(p+j) - '0';
  473.             }
  474.             else
  475.             {
  476.                 return 0;
  477.             }
  478.         }
  479.         return 39;
  480.     }
  481.     if( cmpstrings( p, "net(" ) )            /*網掛け*/
  482.     {
  483.         int        j;
  484.         *pool = 0;
  485.         *i = 5+1;
  486.  
  487.         for( j=4; j<8; j++ )
  488.         {
  489.             if( *(p+j) == ')' )
  490.             {
  491.                 if( *(p+j+1) == '{' )
  492.                     break;
  493.                 else
  494.                     return 0;
  495.             }
  496.             if( *(p+j) >= '0' && *(p+j) <= '9' )
  497.             {
  498.                 ++ *i;
  499.                 *pool *= 10;
  500.                 *pool += *(p+j) - '0';
  501.             }
  502.             else
  503.             {
  504.                 return 0;
  505.             }
  506.         }
  507.  
  508.         return 40;
  509.     }
  510.  
  511.     return 0;
  512. }
  513.  
  514. int        printReady( int e )
  515. {
  516.     int        ch,ec;
  517.  
  518.     if( e > 6 )
  519.         e = 7;
  520.  
  521.     printf( "%s\n準備が出来たら何かキーを押してください。(<a> abort)\n", errmes[e] );
  522.     KYB_clrbuf();
  523.     ch = KYB_read( 0, &ec );
  524.     if( ch == 'a' || ch == 'A' )
  525.         return 1;
  526.  
  527.     return 0;
  528. }
  529.  
  530. void    bufprint( char *b )
  531. {
  532.     while( *b++ )
  533.     {
  534.         printf( "%2x ", *b & 0xff );
  535.     }
  536.     printf("\n");
  537.     return;
  538. }
  539.  
  540. int        end_()
  541. {
  542.     printf( "The end of プリント君. See you again!\n" );
  543.     return;
  544. }
  545.